const wx = require('weixin-js-sdk')

/**
 * 微信JSSDK的二次封装
 */
class Wx {
  static isIosWx () {
    return window.__wxjs_is_wkwebview
  }

  // IOS只要记录首次地址
  // 安卓记住每次打开的地址
  static setPath (path) {
    if (!this.iosPath) {
      this.iosPath = path
    } else {
      this.path = path
    }
  }

  static getPath () {
    if (this.isIosWx()) { // ios
      return this.iosPath
    } else {
      return this.path
    }
  }

  static config (config, debug) {
    wx.config({
      debug: debug || false,
      ...config,
      jsApiList: ['scanQRCode', 'chooseWXPay', 'updateAppMessageShareData', 'updateTimelineShareData', 'getLocation', 'openLocation'] // 必填，需要使用的JS接口列表
    })
    return new Promise((resolve, reject) => {
      wx.ready(function () {
        resolve()
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个会员端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
      })
      wx.error(function (res) {
        reject(res)
        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
      })
    })
  }

  static ready () {
    return new Promise(resolve => {
      wx.ready(function () {
        resolve()
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个会员端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
      })
    })
  }

  static scan () {
    return new Promise(resolve => {
      wx.scanQRCode({
        needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
        scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码，默认二者都有
        success: function (res) {
          // var result = res.resultStr; // 当needResult 为 1 时，扫码返回的结果
          resolve(res.resultStr)
        },
        cancel: function () {
          resolve('cancel')
        }
      })
    })
  }

  static pay (payConfig) {
    return new Promise(resolve => {
      payConfig = JSON.parse(payConfig)
      // console.log(payConfig.package)
      wx.chooseWXPay({
        ...payConfig,
        // timestamp: config.timestamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
        // nonceStr: config.nonceStr, // 支付签名随机串，不长于 32 位
        // package: config.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
        // signType: config.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
        // paySign: config.paySign, // 支付签名
        success: function (res) {
          resolve('ok')
          // 支付成功后的回调函数
        },
        cancel: function (res) {
          // 取消
          resolve('cancel')
        }
      })
    })
  }

  static location () {
    return new Promise(resolve => {
      wx.getLocation({
        type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
        success: function (res) {
          resolve(res)
          // var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
          // var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
          // var speed = res.speed; // 速度，以米/每秒计
          // var accuracy = res.accuracy; // 位置精度
        }
      })
    })
  }

  static openLocation (latitude, longitude) {
    return new Promise(resolve => {
      wx.openLocation({
        latitude: latitude, // 纬度，浮点数，范围为90 ~ -90
        longitude: longitude, // 经度，浮点数，范围为180 ~ -180。
        name: '', // 位置名
        address: '', // 地址详情说明
        scale: 28, // 地图缩放级别,整型值,范围从1~28。默认为最大
        infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
      })
    })
  }

  // 分享
  static share (title, link, imgUrl, desc) {
    return new Promise(resolve => {
      wx.ready(function () { // 需在用户可能点击分享按钮前就先调用
        // 分享给朋友
        wx.updateAppMessageShareData({
          title: title, // 分享标题
          desc: desc, // 分享描述
          link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: imgUrl, // 分享图标
          success: function () {
            // 设置成功
            resolve()
          }
        })
        // 分享朋友圈
        wx.updateTimelineShareData({
          title: title, // 分享标题
          link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
          imgUrl: imgUrl, // 分享图标
          success: function () {
            // 设置成功
            resolve()
          }
        })
      })
    })
  }
}

export default Wx
